package com.estar.app.business.common.utils;


import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.Region;

@SuppressWarnings("deprecation")
public class ExcelUtil {

	 private HSSFWorkbook wb;
	 /*
	     *@function 创建字体
	     * @param height:字体高度，
	     * @param    boldWeight:不加粗设为HSSFFont.BOLDWEIGHT_NORMAL，加粗设为HSSFFont.BOLDWEIGHT_BOLD
	     * @return HSSFFont
	     */
	    public HSSFFont createFont(int height, int boldWeight) {
	        HSSFFont font = wb.createFont();
	        font.setFontHeightInPoints((short) height);
	        font.setBoldweight((short) boldWeight);
	        font.setFontName("Arial");

	        return font;
	    }


	    /*
	     *@function 创建字体
	     * @param  height:字体高度，
	     *  默认为不加粗
	     * @return HSSFFont
	     */

	    public HSSFFont createFont(int height) {
	        HSSFFont font = wb.createFont();
	        font.setFontHeightInPoints((short) height);
	        font.setFontName("Arial");

	        return font;
	    }

	    /*
	     *@function 创建字体
	     * @param height:字体高度，
	     * @param  boldWeight:不加粗设为HSSFFont.BOLDWEIGHT_NORMAL，加粗设为HSSFFont.BOLDWEIGHT_BOLD
	     * @param  color:字体颜色， 调用HSSFColor里面的成员值，
	     *              例如黑色用 HSSFColor.BLACK.index,白色用HSSFColor.WHITE.index
	     * @return HSSFFont
	     */

	    public HSSFFont createFont(int height, int boldWeight, int color) {
	        HSSFFont font = wb.createFont();
	        font.setFontHeightInPoints((short) height);
	        font.setBoldweight((short) boldWeight);
	        font.setColor((short) color);
	        font.setFontName("Arial");

	        return font;
	    }

	    /*
	     *@function 创建字体,:字体高度默认设为14，加粗
	     * @return HSSFFont
	     */
	    public HSSFFont createFontBold() {
	        return createFont(14, HSSFFont.BOLDWEIGHT_BOLD);
	    }

	    /*
	     *@function 创建字体
	     * @param height:字体高度，
	     *  默认为加粗
	     * @return HSSFFont
	     */

	    public HSSFFont createFontBold(int height) {
	        return createFont(height, HSSFFont.BOLDWEIGHT_BOLD);
	    }

	    /*
	     *@function:创建式样
	     * @param font:字体，
	     * 设行居中，列居中
	     * @return HSSFCellStyle
	     */
	    public HSSFCellStyle createStyle(HSSFFont font) {
	        HSSFCellStyle style = wb.createCellStyle();
	        style.setFont(font);
	        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
	        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
	        return style;
	    }

	    public HSSFCellStyle createStyle() {
	        HSSFCellStyle style = wb.createCellStyle();
	        return style;
	    }

	    /*
	     *@function:创建式样
	     * @param  font:字体，
	     * @param  bottom:格子下部线条大小，调用HSSFCellStyle里面的成员值,
	     *              例如HSSFCellStyle.BORDER_THIN,HSSFCellStyle.BORDER_MEDIUM,HSSFCellStyle.BORDER_THICK.
	     * @param  top:格子上部线条大小，调用HSSFCellStyle里面的成员值,
	     *              例如HSSFCellStyle.BORDER_THIN,HSSFCellStyle.BORDER_MEDIUM,HSSFCellStyle.BORDER_THICK.
	     * @param  left:格子左边线条大小，调用HSSFCellStyle里面的成员值,
	     *              例如HSSFCellStyle.BORDER_THIN,HSSFCellStyle.BORDER_MEDIUM,HSSFCellStyle.BORDER_THICK.
	     * @param  right:格子右边线条大小，调用HSSFCellStyle里面的成员值,
	     *              例如HSSFCellStyle.BORDER_THIN,HSSFCellStyle.BORDER_MEDIUM,HSSFCellStyle.BORDER_THICK.
	     * @param  halign:水平对齐方式，HSSFCellStyle.ALIGN_CENTER 居中，HSSFCellStyle.ALIGN_LEFT 左对齐
	     *                          HSSFCellStyle.ALIGN_RIGHT 右对齐
	     * @param  halign:垂直对齐方式，HSSFCellStyle.VERTICAL_CENTER 垂直居中，HSSFCellStyle.VERTICAL_TOP 顶部对齐
	     *                          HSSFCellStyle.VERTICAL_BOTTOM 底部对齐
	     * @param fore: 前景色  调用HSSFColor里面的成员值，如 HSSFColor.YELLOW.index,HSSFColor.BLUE.index
	     * @param back: 背景色  调用HSSFColor里面的成员值,如 HSSFColor.GREEN.index
	     * @param pattern,设置填充背景颜色样式，例如 HSSFCellStyle.SOLID_FOREGROUND
	     * @return HSSFCellStyle
	     */

	    public HSSFCellStyle createStyle(HSSFFont font,
	                                     int bottom, int top, int left, int right,
	                                     int halign, int valign,
	                                     int fore, int back, int pattern) {
	        HSSFCellStyle style = wb.createCellStyle();
	        style.setFont(font);
	        style.setBorderBottom((short) bottom);
	        style.setBorderTop((short) top);
	        style.setBorderLeft((short) left);
	        style.setBorderRight((short) right);
	        style.setAlignment((short) halign);
	        style.setVerticalAlignment((short) valign);
	        style.setFillBackgroundColor((short) back);
	        style.setFillForegroundColor((short) fore);
	        style.setFillPattern((short) pattern);
	        return style;
	    }

	    /*
	     *@function:创建式样
	     * @param  font:字体，
	     * @param  bottom:格子下部线条大小，调用HSSFCellStyle里面的成员值,
	     *              例如HSSFCellStyle.BORDER_THIN,HSSFCellStyle.BORDER_MEDIUM,HSSFCellStyle.BORDER_THICK.
	     * @param  top:格子上部线条大小，调用HSSFCellStyle里面的成员值,
	     *              例如HSSFCellStyle.BORDER_THIN,HSSFCellStyle.BORDER_MEDIUM,HSSFCellStyle.BORDER_THICK.
	     * @param  left:格子左边线条大小，调用HSSFCellStyle里面的成员值,
	     *              例如HSSFCellStyle.BORDER_THIN,HSSFCellStyle.BORDER_MEDIUM,HSSFCellStyle.BORDER_THICK.
	     * @param  right:格子右边线条大小，调用HSSFCellStyle里面的成员值,
	     *              例如HSSFCellStyle.BORDER_THIN,HSSFCellStyle.BORDER_MEDIUM,HSSFCellStyle.BORDER_THICK.
	     * @param  halign:水平对齐方式，HSSFCellStyle.ALIGN_CENTER 居中，HSSFCellStyle.ALIGN_LEFT 左对齐
	     *                          HSSFCellStyle.ALIGN_RIGHT 右对齐
	     * @param  halign:垂直对齐方式，HSSFCellStyle.VERTICAL_CENTER 垂直居中，HSSFCellStyle.VERTICAL_TOP 顶部对齐
	     *                          HSSFCellStyle.VERTICAL_BOTTOM 底部对齐
	     * @return HSSFCellStyle
	     */

	    public HSSFCellStyle createStyle(HSSFFont font,
	                                     int bottom, int top, int left, int right,
	                                     int halign, int valign) {
	        HSSFCellStyle style = wb.createCellStyle();
	        style.setFont(font);
	        style.setBorderBottom((short) bottom);
	        style.setBorderTop((short) top);
	        style.setBorderLeft((short) left);
	        style.setBorderRight((short) right);
	        style.setAlignment((short) halign);
	        style.setVerticalAlignment((short) valign);
	        return style;
	    }

	    /*
	     *@function:创建式样
	     * @param  font:字体，
	     * @param  bottom:格子下部线条大小，调用HSSFCellStyle里面的成员值,
	     *              例如HSSFCellStyle.BORDER_THIN,HSSFCellStyle.BORDER_MEDIUM,HSSFCellStyle.BORDER_THICK.
	     * @param  top:格子上部线条大小，调用HSSFCellStyle里面的成员值,
	     *              例如HSSFCellStyle.BORDER_THIN,HSSFCellStyle.BORDER_MEDIUM,HSSFCellStyle.BORDER_THICK.
	     * @param  left:格子左边线条大小，调用HSSFCellStyle里面的成员值,
	     *              例如HSSFCellStyle.BORDER_THIN,HSSFCellStyle.BORDER_MEDIUM,HSSFCellStyle.BORDER_THICK.
	     * @param  right:格子右边线条大小，调用HSSFCellStyle里面的成员值,
	     *              例如HSSFCellStyle.BORDER_THIN,HSSFCellStyle.BORDER_MEDIUM,HSSFCellStyle.BORDER_THICK.
	     * @return HSSFCellStyle
	     */

	    public HSSFCellStyle createStyle(HSSFFont font,
	                                     int bottom, int top, int left, int right) {
	        HSSFCellStyle style = wb.createCellStyle();
	        style.setFont(font);
	        style.setBorderBottom((short) bottom);
	        style.setBorderTop((short) top);
	        style.setBorderLeft((short) left);
	        style.setBorderRight((short) right);
	        return style;
	    }

	    /*
	     *@function:创建式样
	     * @param  font:字体，
	     * @param  bottom:格子下部线条大小，调用HSSFCellStyle里面的成员值,
	     *              例如HSSFCellStyle.BORDER_THIN,HSSFCellStyle.BORDER_MEDIUM,HSSFCellStyle.BORDER_THICK.
	     * @param  top:格子上部线条大小，调用HSSFCellStyle里面的成员值,
	     *              例如HSSFCellStyle.BORDER_THIN,HSSFCellStyle.BORDER_MEDIUM,HSSFCellStyle.BORDER_THICK.
	     * @param  left:格子左边线条大小，调用HSSFCellStyle里面的成员值,
	     *              例如HSSFCellStyle.BORDER_THIN,HSSFCellStyle.BORDER_MEDIUM,HSSFCellStyle.BORDER_THICK.
	     * @param  right:格子右边线条大小，调用HSSFCellStyle里面的成员值,
	     *              例如HSSFCellStyle.BORDER_THIN,HSSFCellStyle.BORDER_MEDIUM,HSSFCellStyle.BORDER_THICK.
	     * @param fore: 前景色  调用HSSFColor里面的成员值，如 HSSFColor.YELLOW.index,HSSFColor.BLUE.index
	     * @param back: 背景色  调用HSSFColor里面的成员值,如 HSSFColor.GREEN.index
	     * @param pattern,设置填充背景颜色样式，例如 HSSFCellStyle.SOLID_FOREGROUND
	     * @return HSSFCellStyle
	     */

	    public HSSFCellStyle createStyle(HSSFFont font,
	                                     int bottom, int top, int left, int right,
	                                     int fore, int back, int pattern) {
	        HSSFCellStyle style = wb.createCellStyle();
	        style.setFont(font);
	        style.setBorderBottom((short) bottom);
	        style.setBorderTop((short) top);
	        style.setBorderLeft((short) left);
	        style.setBorderRight((short) right);
	        style.setFillBackgroundColor((short) back);
	        style.setFillForegroundColor((short) fore);
	        style.setFillPattern((short) pattern);
	        return style;
	    }

	    /*
	     *@function:创建式样
	     * @param  font:字体，
	     * @param fore: 前景色  调用HSSFColor里面的成员值，如 HSSFColor.YELLOW.index,HSSFColor.BLUE.index
	     * @param back: 背景色  调用HSSFColor里面的成员值,如 HSSFColor.GREEN.index
	     * 格子四围线条大小都设为 HSSFCellStyle.BORDER_THIN，
	     * 水平居中，垂直居中
	     * @return HSSFCellStyle
	     */
	    public HSSFCellStyle createStyleThinFrame(HSSFFont font, int fore, int back) {
	        HSSFCellStyle style = createStyle(font, HSSFCellStyle.BORDER_THIN,
	                                          HSSFCellStyle.BORDER_THIN,
	                                          HSSFCellStyle.BORDER_THIN,
	                                          HSSFCellStyle.BORDER_THIN,
	                                          HSSFCellStyle.ALIGN_CENTER,
	                                          HSSFCellStyle.VERTICAL_CENTER,
	                                          fore, back,
	                                          HSSFCellStyle.SOLID_FOREGROUND);
	        return style;
	    }

	    /*
	     *@function:创建式样
	     * @param  font:字体，
	     * @param fore: 前景色  调用HSSFColor里面的成员值，如 HSSFColor.YELLOW.index,HSSFColor.BLUE.index
	     * @param back: 背景色  调用HSSFColor里面的成员值,如 HSSFColor.GREEN.index
	     * 格子四围线条大小都设为 HSSFCellStyle.BORDER_THIN，
	     * 水平左对齐，垂直底部对齐
	     * @return HSSFCellStyle
	     */
	    public HSSFCellStyle createStyleThinFrame2(HSSFFont font, int fore,
	                                               int back) {
	        HSSFCellStyle style = createStyle(font, HSSFCellStyle.BORDER_THIN,
	                                          HSSFCellStyle.BORDER_THIN,
	                                          HSSFCellStyle.BORDER_THIN,
	                                          HSSFCellStyle.BORDER_THIN,
	                                          HSSFCellStyle.ALIGN_LEFT,
	                                          HSSFCellStyle.VERTICAL_BOTTOM,
	                                          fore, back,
	                                          HSSFCellStyle.SOLID_FOREGROUND);
	        return style;
	    }
	    
	    /*
	     *@function:创建式样
	     * @param  font:字体，
	     * @param fore: 前景色  调用HSSFColor里面的成员值，如 HSSFColor.YELLOW.index,HSSFColor.BLUE.index
	     * @param back: 背景色  调用HSSFColor里面的成员值,如 HSSFColor.GREEN.index
	     * 格子四围线条大小都设为 HSSFCellStyle.BORDER_THIN，
	     * 水平居中，垂直居中
	     * @return HSSFCellStyle
	     */
	    public HSSFCellStyle createStyleThinFrame3(HSSFFont font, int fore, int back) {
	        HSSFCellStyle style = createStyle(font, HSSFCellStyle.BORDER_MEDIUM,
	                                          HSSFCellStyle.BORDER_MEDIUM,
	                                          HSSFCellStyle.BORDER_MEDIUM,
	                                          HSSFCellStyle.BORDER_MEDIUM,
	                                          HSSFCellStyle.ALIGN_CENTER,
	                                          HSSFCellStyle.VERTICAL_CENTER,
	                                          fore, back,
	                                          HSSFCellStyle.SOLID_FOREGROUND);
	        return style;
	    }

	    /*
	     * 创建行
	     * @param sheet
	     * @param rowIndex 行号,从0开始
	     * @return 行
	     */
	    public HSSFRow createRow(HSSFSheet sheet, int rowIndex) {
	        return sheet.createRow((short) rowIndex);
	    }

	    /*
	     * 设默认的列宽
	     */
	    public void setDefaultColumnWidth(HSSFSheet sheet, int width) {
	        sheet.setDefaultColumnWidth((short) width);
	    }

	    /*
	     * @function 设列宽
	     * @columnIndex 第几列，从0开始
	     * @width 宽度，一般为1000~10000
	     */
	    public void setColumnWidth(HSSFSheet sheet, int columnIndex, int width) {
	        sheet.setColumnWidth((short) columnIndex, (short) width);
	    }

	
	    
	    
	    /*
	     * 创建cell
	     * cell.setEncoding(HSSFCell.ENCODING_UTF_16) 为显示非欧美符号
	     * @param row 将cell添加到所在的行row中
	     * @cellIndex 行中的第几格，从0开始
	     * @value cell显示的值
	     * @return HSSFCell
	     */
	    public HSSFCell createCell(HSSFRow row, int cellIndex, String value) {
	        HSSFCell cell = row.createCell((short) cellIndex);
	        //显示中文。
//	        cell.setEncoding(HSSFCell.ENCODING_UTF_16);
	        cell.setCellValue(value);
	        return cell;
	    }

	    /*
	     * 创建cell
	     * cell.setEncoding(HSSFCell.ENCODING_UTF_16) 为显示非欧美符号
	     * @param row 将cell添加到所在的行row中
	     * @cellIndex 行中的第几格，从0开始
	     * cell尚未设值
	     * @return HSSFCell
	     */

	    public HSSFCell createCell(HSSFRow row, int cellIndex) {
	        HSSFCell cell = row.createCell((short) cellIndex);
	        //显示中文。
//	        cell.setEncoding(HSSFCell.ENCODING_UTF_16);
	        return cell;
	    }

	    /*
	     * @function 合并单元格并添加到表中
	     * @param sheet 将合并后的单元格region添加到表sheet里面
	     * @param text  单元格region的值
	     * @param style 单元格region的式样
	     * @param row1 单元格region的开始行
	     * @param col1 单元格region的开始列
	     * @param row2 单元格region的结束行
	     * @param col2 单元格region的结束列
	     */
	    public void addRegion(HSSFSheet sheet, String text, HSSFCellStyle style,
	                          int row1, int col1, int row2, int col2) {
	        for (int r = row1; r <= row2; r++) {
	            HSSFRow row = createRow(sheet, r);
	            row.setHeight((short)(50*20));
	            for (int c = col1; c <= col2; c++) {
	                HSSFCell cell = createCell(row, c);
	                cell.setCellStyle(style);
//	                cell.setEncoding(HSSFCell.ENCODING_UTF_16);
	                cell.setCellValue(text);
	            }
	        }
	        Region region = new Region(row1, (short) col1, row2, (short) col2);
	        sheet.addMergedRegion(region);
	    }

	    /*
	     * @function 改变单元格的文字
	     * @param sheet 表
	     * @param rowIndex 第几行
	     * @param cellIndex 第几列
	     * @param value 文字
	     */
	    public void alterCell(HSSFSheet sheet, int rowIndex, int cellIndex,
	                          String value) {
	        HSSFCell cell = sheet.getRow(rowIndex).getCell((short) cellIndex);
//	        cell.setEncoding(HSSFWorkbook.ENCODING_UTF_16);
	        cell.setCellValue(value);
	    }

	    /*
	     *@function 改变单元格的文字和样式
	     * @param sheet 表
	     * @param rowIndex 第几行
	     * @param cellIndex 第几列
	     * @param value 文字
	     * @param style 样式
	     */
	    public void alterCell(HSSFSheet sheet, int rowIndex, int cellIndex,
	                          String value, HSSFCellStyle style) {
	        HSSFCell cell = sheet.getRow(rowIndex).getCell((short) cellIndex);
//	        cell.setEncoding(HSSFWorkbook.ENCODING_UTF_16);
	        cell.setCellValue(value);
	        cell.setCellStyle(style);
	    }
	    
	   
	  

	   
	  
	    
	    public String getStringValue(double i){
	    	String s = "";
	    	if (i==0 ) {
				s="";
			}else {
				s = String.valueOf(i);
			}
	    	return s ;
	    }
	    
	    public String getfStringValue(Float f){
	    	String s = "";
	    	if (f==0.00 ) {
				s="";
			}else {
				s = String.valueOf(f);
			}
	    	return s ;
	    }
	    
//	    public void outputExcel(OutputStream os,List<VideoSrvyVO> list) throws IOException {
//	    	this.outputExcel(os,null, list);
//	    }

	    public static void main(String[] args) throws Exception {
//	        ListExcel e = new ListExcel();
//	        OutputStream os = new FileOutputStream("d:\\fiiss2.xls");
//	        InputStream in = new FileInputStream(e.getClass().getResource("/") + "\\任务清单列表.xls");
//	        HSSFWorkbook workbook = new HSSFWorkbook(in);
//	        e.outputExcel(os, workbook, e.getReportList(cfg));

		    }
 
}
